2 uzivatelia edituju rovnaky zaznam v IB

Otázka od: hlas

28. 10. 2002 9:10

Neviem, ci tomu nespravne rozumiem alebo to nefunguje...

Robim aplikaciu v D7 cez DBExpress komponentu TSimpleDataSet.
nad Firebirdom. Kod udalosti afterpost je jednoduchy:

  if not DM.SQLCon.InTransaction then
  begin
    TD.TransactionID:=1;
    TD.IsolationLevel:=xilREADCOMMITTED;
    DM.SQLCon.StartTransaction(TD);
    try
      DM.SDSAdr.ApplyUpdates(-1);
      DM.SDSAdrPol.ApplyUpdates(-1);
      DM.SQLCon.Commit(TD);
    except
      DM.SQLCon.Rollback(TD);
    end;
  end;

V pripade, ze prvy uzivatel ulozi svoju zmenu skor, zmena sa zapise
do databazy. Druhy uzivatel pri pokuse o ulozenie toho isteho zaznamu
je upozorneny, ze pocas editacie boli zmenene niektore polia.
Zobrazi sa reconcile dialog na zaklade udalosti
OnReconcile Error, ktora je tiez jednoducha:

  Action := HandleReconcileError(DataSet, UpdateKind, E);

Ocakaval som, ze uzivatel si v tomto dialogu moze vybrat, ci tie svoje
zmeny chce aj tak ulozit, alebo nie. Ocakaval som, ze ak vyberie
action:=raCorrect
zmeny druheho sa ulozia do databazy a vpodstate tak druhy uzivatel prepise
prveho, ale nic. Robim niekde chybu? Jednoducho nedokazem, aby druhy
prepisal prveho, ak chce.

Odpovedá: Zbysek Hlinka

28. 10. 2002 9:19

On 28 Oct 2002 at 8:39, hlas wrote:

> Neviem, ci tomu nespravne rozumiem alebo to nefunguje...
>
> if not DM.SQLCon.InTransaction then
> begin
> TD.TransactionID:=1;
> TD.IsolationLevel:=xilREADCOMMITTED;
> DM.SQLCon.StartTransaction(TD);
> try
> DM.SDSAdr.ApplyUpdates(-1);
> DM.SDSAdrPol.ApplyUpdates(-1);
> DM.SQLCon.Commit(TD);
> except
> DM.SQLCon.Rollback(TD);
> end;
> end;
>
> V pripade, ze prvy uzivatel ulozi svoju zmenu skor, zmena sa zapise do
> databazy. Druhy uzivatel pri pokuse o ulozenie toho isteho zaznamu je
> upozorneny, ...
> Robim niekde chybu?

Jo. Kdyz mas aktivni kursor na data, nemuzes je menit. Musis posila
SLQ prikaz Update. Budto si to predelej tak, aby sis jen stahnul data
a pak se od DB odpojil, nebo posli prikaz jinou komponentou a pak
udelej refresh.

S pozdravem

Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282

Odpovedá: hlas

28. 10. 2002 12:06


----- Original Message -----
From: "Zbysek Hlinka" <hlinka@hlinka.cz>

> Jo. Kdyz mas aktivni kursor na data, nemuzes je menit. Musis posila
> SLQ prikaz Update. Budto si to predelej tak, aby sis jen stahnul data
> a pak se od DB odpojil, nebo posli prikaz jinou komponentou a pak
> udelej refresh.
>
> Zbysek Hlinka


Nemozes to popisat prosim ta lepsie? Ked robim s komponentou
TSimpleDataSet, tak neposielam sql prikaz update,
to riesi sama komponenta, takze neviem ako
by som cez TSimpleDataSet poslal Update.
Viem si to predstavit napr. cez IBX komponenty
IB Query a IBUpdateSql.

Neviem tiez ako sa odpijit od DB.
Akonahle dam Tsimpledataset.active:=false,
tak koncim...

Aku inu komponentu mam dat do hry?

Hlas

Odpovedá: Zbysek Hlinka

28. 10. 2002 13:40

On 28 Oct 2002 at 11:40, hlas wrote:

> Nemozes to popisat prosim ta lepsie? Ked robim s komponentou
> TSimpleDataSet, tak neposielam sql prikaz update,
> to riesi sama komponenta, takze neviem ako
> by som cez TSimpleDataSet poslal Update.
> Viem si to predstavit napr. cez IBX komponenty
> IB Query a IBUpdateSql.

Nesmis to nechat na komponente, kterou ctes data, zejmena kdyz tato
komponenta udrzuje zive spojeni na kursor s daty. Veskere inserty,
updaty a delety je stejne nejbezpecnejsi delat pomoci ulozenych
procedur.

S pozdravem

Zbysek Hlinka
E-mail: hlinka@hlinka.cz, localizator@localizator.com
Phone: +420 603 551 282